package com.sayice.robotconflict.game.object.property;

/**
 * 坐标
 *
 * @author shubing
 */
public interface Coord {
    /**
     * 获取x坐标
     *
     * @return x坐标
     */
    double getX();
    
    /**
     * 获取y坐标
     *
     * @return y坐标
     */
    double getY();
    
    /**
     * 设置x坐标
     *
     * @param x x坐标
     */
    void setX(double x);
    
    /**
     * 设置y坐标
     *
     * @param y y坐标
     */
    void setY(double y);
    
    /**
     * 设置坐标
     *
     * @param x x坐标
     * @param y y坐标
     */
    void set(double x, double y);
    
    /**
     * 设置坐标
     *
     * @param coord 坐标
     */
    default void set(Coord coord) {
        set(coord.getX(), coord.getY());
    }
    
    /**
     * x坐标加上指定数值
     *
     * @param value 要加的数值
     */
    void addX(double value);
    
    /**
     * y坐标加上指定数值
     *
     * @param value 要加的数值
     */
    void addY(double value);
    
    /**
     * 与指定坐标之间的距离
     *
     * @param coord 坐标
     * @return 当前坐标与指定坐标之间的距离
     */
    default double distanceTo(Coord coord) {
        return Math.sqrt(Math.pow(getX() - coord.getX(), 2) + Math.pow(getY() - coord.getY(), 2));
    }
    
    /**
     * 与指定坐标之间的距离的平方
     *
     * @param coord 坐标
     * @return 当前坐标与指定坐标之间的距离的平方
     */
    default double sqrDistanceTo(Coord coord) {
        return Math.pow(getX() - coord.getX(), 2) + Math.pow(getY() - coord.getY(), 2);
    }
}